class ConfirmacionException < Exception; end

class UsuariosController < ApplicationController 
  before_filter :login_required, :only => [:update]
  
  def index
    redirect_to main_path if !logged_in?
  end
  
  def show
    @perfil = current_usuario.perfil
    render :action => :perfil
  end

  # render new.rhtml
  def new
    @usuario = Usuario.new
  end

  def create
    @usuario = Usuario.new(params[:usuario])    
    if @usuario.valid? && params[:confirma][:condiciones] == "1"
      @usuario.save!
      redirect_to main_path
      flash[:notice] = "¡Gracias por registrarte! En breve recibirás el correo de activación."
    else
      if !@usuario.valid?
        raise ActiveRecord::RecordInvalid, @usuario
      else
        raise ConfirmacionException
      end
    end   
  rescue ActiveRecord::RecordInvalid
    flash[:error] = "El registro contiene errores."
    render :action => 'new'
  rescue ConfirmacionException
    flash[:error] = "Recuerda aceptar las condiciones de uso."
    render :action => 'new'
  end
  
  def update
    respond_to do |format|
      email = params[:usuario][:email]
      
      if email.not.blank?
        if Usuario.find_by_email(email).blank?
          # Utilizo el RegExp de validate_email_format_of
          if email =~ /^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$/i
            self.current_usuario.change_email_address(params[:usuario][:email]) 
            self.current_usuario.save
            flash[:notice] = "Nuevo email pendiente de confirmación.<br/> Consulta tu correo."
          else
            flash[:error] = "El correo tiene un formato incorrecto."
          end
        else
          flash[:error] = "El correo ya existe en el sistema."
        end            
      else
        
        if current_usuario.update_attributes(params[:usuario])
          flash[:notice] = "Usuario actualizado."
        else
          flash[:error] = "No hemos podido actualizar el usuario."
        end
      
      end
      
      format.html { redirect_to usuario_home_path(current_usuario.login) }
    end
  end

  def activate
    self.current_usuario = params[:id].blank? ? :false : Usuario.find_by_activation_code(params[:id])
    if logged_in? && !current_usuario.activated?
      current_usuario.activate
      flash[:notice] = "¡Registro completo!"
    end
    redirect_back_or_default('/')
  end
  
end
